//package com.runa.persistence;
//
//import com.fasterxml.jackson.core.type.TypeReference;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.util.*;
//
//@Component
//public final class RedisUtil {
//
//    @Resource
//    private RedisTemplate<String, Object> redisTemplate;
//
//    public Map<Object, Object> hgetall(String key, Class clazz) {
//        Map<Object, Object> result = new HashMap<>();
//        for (Map.Entry entry :
//                redisTemplate.opsForHash().entries(key).entrySet()) {
//            result.put(entry.getKey(), SerializeUtil.json2pojo((String) entry.getValue(), clazz));
//        }
//        return result;
//    }
//
//    public void hputall(String key, Map<Object, Object> entries) {
//        Map<Object, Object> kv = new HashMap<>();
//        for (Map.Entry entry : entries.entrySet()) {
//            kv.put(entry.getKey(), entry.getValue());
//        }
//        redisTemplate.opsForHash().putAll(key, kv);
//    }
//
//    public void delete(String key) {
//        redisTemplate.delete(key);
//    }
//
//    public <T> T hget(String key, String field, Class<T> clazz) {
//        return SerializeUtil.json2pojo((String) redisTemplate.opsForHash().get(key, field),clazz);
//    }
//
//    public <T> T hget(String key, String field, TypeReference typeReference) {
//        if(redisTemplate.opsForHash().get(key, field)!=null) {
//            return (T) SerializeUtil.json2pojo((String) redisTemplate.opsForHash().get(key, field), typeReference);
//        }else {
//            return null;
//        }
//    }
//
//    public <T> List<T> hmget(String key, Class<T> clazz, List<String> fields) {
//        List<T> list = new ArrayList<>();
//        for (Object json : redisTemplate.opsForHash()
//                .multiGet(key, (ArrayList)fields)){
//            list.add(SerializeUtil.json2pojo((String) json, clazz));
//        }
//        return list;
//    }
//
//    public void hset(String key, String field, Object value) {
//        redisTemplate.opsForHash().put(key, field, SerializeUtil.obj2json(value));
//    }
//
//    public <T> List<T> values(String key, Class<T> clazz) {
//        List<T> list = new ArrayList<>();
//        for (Object json : redisTemplate.opsForHash().values(key)) {
//            list.add(SerializeUtil.json2pojo((String) json, clazz));
//        }
//        return list;
//    }
//
//    public void sadd(String key, Object ...os) {
//        redisTemplate.opsForSet().add(key, os);
//    }
//
//    public <T> Set<T> smembers(String key, Class<T> clazz) {
//        Set<T> set = new HashSet<>();
//        for (Object json : redisTemplate.opsForSet().members(key)) {
//            set.add(SerializeUtil.json2pojo((String) json, clazz));
//        }
//        return set;
//    }
//
//}
